package com.chj.chuji.tijie14;

import java.util.ArrayList;

public class BitOperation {
	public static void main(String[] args) {
		System.out.println(4 & 5);
		int n = 9;
		int[] ard = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
		int[] a = new int[n + 1];
		for (int i = 1; i <= n; i++) {
//			cin >> a[i];
			a[i] = ard[i - 1];
		}

		ArrayList<Integer> vec = new ArrayList<Integer>();
		for (int i = 30; i >= 0; i--) { // 从高位开始枚举
			int p = 1 << i; // 判断当前最高位i是否为1
			int pp = p - 1; // 判断除最高位外其余位是否为0
			for (int j = 1; j <= n; j++) { // 遍历整个a数组选取数
				if ((a[j] & p) == p) { // 当前的i位为1
					vec.add(a[j]);
//					pp &= a[j];
					pp = (pp & a[j]);
				}
			}
			if (pp == 0) {
				break; // 只有最高位为1，由于是从最高位开始枚举，所以第一个合法解即为答案
			}
			vec.clear();
		}
		for (int j = 0; j < vec.size(); j++) {
			System.out.print(vec.get(j) + " ");
		}
	}
}

//using namespace std;
//typedef long long LL;
//typedef unsigned long long ULL;
//const int INF = 0x3f3f3f3f;
//const double eps = 1e-9;
//const int Mod = 1e9 + 7;
//const int MaxN = 1e5 + 5;
// 
//vector <LL> vec;
//LL a[MaxN];
// 
//int main()
//{
//	Fio;
// 
//	int n;
//	cin >> n;
//	for(int i = 1; i <= n; i++) cin >> a[i];
//	for(int i = 30; i >= 0; i--) { //从高位开始枚举
//		int p = 1 << i; //判断当前最高位i是否为1
//		int pp = p - 1; //判断除最高位外其余位是否为0
//		for(int j = 1; j <= n; j++) { //遍历整个a数组选取数
//			if(a[j] & p) { //当前的i位为1
//				vec.push_back(a[j]);
//				pp &= a[j];
//			}
//		}
//		if(pp == 0) break; //只有最高位为1，由于是从最高位开始枚举，所以第一个合法解即为答案
//		vec.clear();
//	}
//	cout << vec.size() << endl;
//	for(int j = 0; j < vec.size(); j++) cout << vec[j] << " ";
//	cout << endl;
//	return 0;
//}